home *** CD-ROM | disk | FTP | other *** search
Wrap
'************************************************************ ' • TEXT-EDITOR • '************************************************************ ' ' Es können ASCII-Dateien geöffnet, editiert,gesichert und ' gedruckt werden. Die maximale Textlänge beträgt 32 kByte. ' Makros können editiert und als Menüs gespeichert werden. ' Finden und Ersetzen ist einzeln und global möglich. Hilfe ' ist online verfügbar und kann eingesetzt werden. Der Editor ' verfügt über eine Seitenansicht für den Ausdruck. ' '************************************************************ ' • VARIABLEN • '************************************************************ DIM Ascent%,Descent%,WidMax%,Leading% DIM itype(63),ihndl&(63),irect$(63) DIM T,L,B,R,MY,MX DIM VT,VL,VB,VR DIM AT,AL,AB,AR DIM L(4) DIM R(4) DIM BT,BL,BB,BR DIM CT,CL,CB,CR DIM DT,DL,DB,DR DIM UT,UL,UB,UR DIM ST,SL,SB,SR DIM FT,FL,FB,FR DIM C$(55) DIM M$(50) DIM N$(50) DIM Mt$(50) DIM Nt$(50) DIM Buff(256) DIM 128 paramBlock$ DIM K%(8) CLEAR 33000,0 C%=1 Mak=0 Undo=0 Start=1 save=0 '************************************************************ ' • FUNKTIONEN • '************************************************************ LONG FN Word LONG IF But3=1 Chndl&=FN TEGETTEXT(Tehndl&) adr1&=PEEK LONG(Chndl&)+new& adr2&=PEEK LONG(Chndl&)+new&+flen& l1=PEEK(adr1&-1) l2=PEEK(adr2&) LONG IF (l1<48 OR (l1>57 AND l1<65) OR (l1>90 AND l1<97) OR (l1>122 AND l1<127)) AND (l2<48 OR (l2>57 AND l2<65) OR (l2>90 AND l2<97) OR (l2>122 AND l2<127)) XELSE IF REF=2 THEN old&=new&+flen&:GOTO "FIND" IF REF=3 THEN old&=new&+rlen&:GOTO "REPLACE" END IF END IF IF REF=3 AND But1=1 THEN CALL TEAUTOVIEW(0,Tehndl&) CALL TESETSELECT(new&+flen&,new&+flen&,Tehndl&) CALL TESETSELECT(new&,new&+flen&,Tehndl&) END FN '------------------------------------------------------------ DEF FN Print&=PEEK LONG(PRHANDLE) '------------------------------------------------------------ LONG FN Res&(Res$,Rnum) Rhndl&=FN GETRESOURCE(CVI(Res$),Rnum) END FN '------------------------------------------------------------ LONG FN PutGet(Num,Cicn,Put$) GOSUB "CENTER DIALOG" cicnhndl&=FN Res&(C$(7),Cicn) CALL SETRESINFO(cicnhndl&,100,C$(15)) Iconhndl&=FN GETICON(Cicn) CALL SETRESINFO(Iconhndl&,100,C$(15)) MY=UT:MX=UL IF Num=100 OR Num=140 THEN CALL SFPGETFILE(MY,Put$,0,1,Type&,0,SFReply$,Num,0) IF Num=101 THEN CALL SFPPUTFILE(MY,Put$,F$,0,SFReply$,101,0) CALL SETRESINFO(Iconhndl&,Cicn,C$(15)) CALL SETRESINFO(cicnhndl&,Cicn,C$(15)) Adr&=VARPTR(SFReply$) Good=PEEK(Adr&) Len=PEEK(Adr&+10) F$=C$(15) FOR I=1 TO Len F$=F$+CHR$(PEEK(Adr&+10+I)) NEXT I IF Good=0 THEN F$=C$(15) Vol%=PEEK WORD(Adr&+6) GOSUB "UPDATE" END FN = Vol% '------------------------------------------------------------ DEF FN teWord%(N)=PEEK WORD(PEEK LONG(Tehndl&)+N) DEF FN teLong&(N)=PEEK LONG(PEEK LONG(Tehndl&)+N) DEF FN Line(N)=FN teWord%(100+N)-FN teWord%(98+N) DEF FN LineLen%(Zeile)=FN teWord%(98+2*Zeile)-FN teWord%(96+2*Zeile) '------------------------------------------------------------ DEF FN PrParm%(N)=PEEK WORD(FN Print&+N) '------------------------------------------------------------ LONG FN teLock& texthndl&=FN teLong&(62) END FN=USR 3(texthndl&) '------------------------------------------------------------ LONG FN Buffer Bufhndl&=FN TEGETTEXT(Tehndl&) Buflen&=FN GETHANDLESIZE(Bufhndl&) END FN '------------------------------------------------------------ LONG FN Undo Undohndl&=FN TEGETTEXT(Tehndl&) Undolen&=FN GETHANDLESIZE(Undohndl&) END FN '------------------------------------------------------------ LONG FN Format CLS textPtr&=FN teLock& FOR i=0 TO FN teWord%(94) n0=FN teWord%(96+2*i) n1=FN teWord%(96+2*i+2)-1 n2=FN teWord%(96+2*i+2) adr1&=textPtr&+n1 adr2&=textPtr&+n2 teChar1=PEEK(adr1&) teChar2=PEEK(adr2&) LONG IF CR=1 LONG IF teChar1=32 POKE adr1&,13 END IF XELSE LONG IF teChar2<>13 AND teChar1=13 AND n0<>n1 POKE adr1&,32 END IF END IF NEXT i X&=USR 7(texthndl&) END FN '------------------------------------------------------------ LONG FN EditToPrint textPtr&=FN teLock& textLen =FN teWord(60) L=0 Zlen=FN LineLen%(L) CLEAR INDEX 0 CLEAR textLen+600 temp$=C$(15) textPtr&=FN teLock& FOR I=0 TO textLen-1 teChar=PEEK(textPtr&+I) LONG IF teChar=13 INDEX$(L)=temp$ temp$=C$(15) L=L+1 Zlen=FN LineLen%(L) XELSE LONG IF LEN(temp$)<Zlen-1 temp$=temp$+CHR$(teChar) XELSE LONG IF Wrap=1 temp$=temp$+CHR$(13) INDEX$(L)=temp$ temp$=C$(15) L=L+1 Zlen=FN LineLen%(L) END IF END IF END IF NEXT I INDEX$(L)=temp$ X&=USR 7(texthndl&) END FN=Lines '------------------------------------------------------------ LONG FN IndexToEdit(Lines) Mem&=MEM(-1) Tsize&=MEM(20) Handle&=USR 5(Tsize&) Lock&=USR 3(Handle&) LAdr&=Lock& Tadr&=MEM(40) FOR I=0 TO Lines Length%=PEEK(Tadr&) Tadr&=Tadr&+1 BLOCKMOVE Tadr&,Lock&,Length% Tadr&=Tadr&+Length% Lock&=Lock&+Length% POKE Lock&,13 Lock&=Lock&+1 NEXT I t&=FN teLong&(62) X&=USR 6(t&) X&=USR 7(Handle&) POKE LONG PEEK LONG(Tehndl&)+62,Handle& POKE WORD PEEK LONG(Tehndl&)+60,Lock&-LAdr& CALL TECALTEXT(Tehndl&) END FN '------------------------------------------------------------ LONG FN Strings(n) Hndl&=FN GETRESOURCE(CVI("STR#"),n) Adr&=PEEK LONG(Hndl&)+2 NumS=PEEK(Adr&-1) Length=PEEK(Adr&) FOR N=1 TO NumS FOR I=1 TO Length C$(N)=C$(N)+CHR$(PEEK(Adr&+I)) NEXT I IF Length=0 THEN C$(N)="" Adr&=Adr&+Length+1 Length=PEEK(Adr&) NEXT N END FN '------------------------------------------------------------ LONG FN Menustring(n) MakHndl&=FN Res&(C$(13),n) Adr&=PEEK LONG(MakHndl&)+2 NumM=PEEK(Adr&-1) LengthN=PEEK(Adr&) FOR N=1 TO NumM FOR I=1 TO LengthN N$(N)=N$(N)+CHR$(PEEK(Adr&+I)) NEXT I IF LengthN=0 THEN N$(N)=C$(15) Adr&=Adr&+LengthN+1 LengthM=PEEK(Adr&) FOR I=1 TO LengthM M$(N)=M$(N)+CHR$(PEEK(Adr&+I)) NEXT I IF LengthM=0 THEN M$(N)=C$(15) Adr&=Adr&+LengthM+1 LengthN=PEEK(Adr&) NEXT N END FN '------------------------------------------------------------ LONG FN FIND(REF) LONG IF old&<clen& new&=FN MUNGER(chndl&,old&,fadr&,flen&,0,rlen&) CALL TESETSELECT(new&+flen&,new&+flen&,Tehndl&) CALL TESETSELECT(new&,new&+flen&,Tehndl&) SELECT REF CASE 1 OR 2 old&=new&+flen& clen&=FN GETHANDLESIZE(chndl&) CASE 3 new&=FN MUNGER(chndl&,old&,fadr&,flen&,radr&,rlen&) CALL TESETSELECT(new&+flen&,new&+flen&,Tehndl&) CALL TESETSELECT(new&,new&+flen&,Tehndl&) old&=new&+flen& clen&=FN GETHANDLESIZE(chndl&) IF But1=1 THEN FN FIND(REF) CASE ELSE END SELECT END IF END FN '------------------------------------------------------------ LONG FN Ton Sndhndl&=FN Res&(C$(41),128) Err%=FN SNDPLAY(0,Sndhndl&,-1) END FN '------------------------------------------------------------ LONG FN Links AT=0:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1 CALL CLIPRECT(AT) PEN ,,,10,25 FN Ton WHILE FN BUTTON CALL GETMOUSE(MY):X=MX:DELAY 10 LONG IF (MX>=Off AND MX<right-Bxnew*Unit-56) PLOT MX,0 TO MX,WINDOW(3)-1 DO:CALL GETMOUSE(MY):UNTIL MX<>X OR FN BUTTON=0 PLOT X,0 TO X,WINDOW(3)-1 END IF WEND IF MX<Off THEN MX=Off IF MX>right-Bxnew*Unit-56 THEN BEEP:MX=right-Bxnew*Unit-56 FN Ton:Mark=1 AT=25:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1 END FN=(MX+Bxnew*Unit) '------------------------------------------------------------ LONG FN Rechts AT=0:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1 CALL CLIPRECT(AT) PEN ,,,10,25 FN Ton WHILE FN BUTTON CALL GETMOUSE(MY):X=MX:DELAY 10 LONG IF (MX>left-Bxnew*Unit+56) PLOT MX,0 TO MX,WINDOW(3)-1 DO:CALL GETMOUSE(MY):UNTIL MX<>X OR FN BUTTON=0 PLOT X,0 TO X,WINDOW(3)-1 END IF WEND IF MX<left-Bxnew*Unit+56 THEN BEEP:MX=left-Bxnew*Unit+56 FN Ton:Mark=1 AT=25:AL=0:AB=WINDOW(3)-1:AR=WINDOW(2)-1 END FN=(MX+Bxnew*Unit) '------------------------------------------------------------ LONG FN Markposition AT=14:AL=4:AB=25:AR=WINDOW(2)-1 CALL ERASERECT(AT) posright=right-Bxnew*Unit IF posright>=Off THEN PICTURE (posright-4,14),Marks& posleft=left-Bxnew*Unit IF posleft>=Off THEN PICTURE (posleft-4,14),Marks& END FN '------------------------------------------------------------ LONG FN Lineal(Unit,Start) PICTURE ON AT=0:AL=4:AB=12:AR=WINDOW(2)-1 CALL CLIPRECT(AT) CALL ERASERECT(AT) TEXT 3,9,0,0 FOR I=0 TO (WINDOW(2))/Unit PLOT Unit*I+Off,12 TO Unit*I+Off,2 IF I+Start< 10 THEN PRINT %(1+Unit*I+Off,8) I+Start;CHR$(32) IF I+Start>=10 THEN PRINT %(1+Unit*I+Off,8) I+Start FOR J=1 TO 3 PLOT Unit*I+(Unit/4)*J+Off,12 TO Unit*I+(Unit/4)*J+Off,9 NEXT J NEXT I PICTURE OFF,Lin& AT=0:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1 CALL CLIPRECT(AT) TEXT FONTNUMBER,FONTSIZE,0,1 END FN=Lin& '------------------------------------------------------------ LONG FN openParams(fileName$,ioVRefNum%) hParmBlkPtr&=VARPTR(paramBlock$) ioNamePtr&=VARPTR(fileName$) POKE LONG hParmBlkPtr&+18,ioNamePtr& POKE WORD hParmBlkPtr&+22,ioVRefNum% OSerr=FN SETVOL(hParmBlkPtr&) OSerr=FN GETFILEINFO(hParmBlkPtr&) ResFileRef%=FN OPENRFPERM(fileName$,ioVRefNum%,0) END FN=ResFileRef% '------------------------------------------------------------ LONG FN saveParams(fileName$,Type$,ioVRefNum%) hParmBlkPtr&=VARPTR(paramBlock$) ioNamePtr&=VARPTR(fileName$) POKE LONG hParmBlkPtr&+18,ioNamePtr& POKE WORD hParmBlkPtr&+22,ioVRefNum% OSerr=FN DELETE(hParmBlkPtr&) OSerr=FN SETVOL(hParmBlkPtr&) CALL CREATERESFILE(fileName$) POKE LONG hParmBlkPtr&+18,ioNamePtr& OSerr=FN GETFILEINFO(hParmBlkPtr&) POKE LONG hParmBlkPtr&+32,CVI(Type$) POKE LONG hParmBlkPtr&+36,CVI(C$(43)) OSerr=FN SETFILEINFO(hParmBlkPtr&) ResFileRef%=FN OPENRFPERM(fileName$,ioVRefNum%,0) END FN=ResFileRef% '------------------------------------------------------------ LONG FN WriteStyle Type$=C$(8) Ref%=FN saveParams(F$,Type$,Vol%) Style$=MKI$(4)+MKI$(FONTSIZE)+MKI$(FONTNUMBER)+MKI$(left)+MKI$(right) Len&=LEN(Style$) Adr&=VARPTR(Style$)+1 Shndl&=FN NEWHANDLE(Len&) Sadr&=USR 3(Shndl&) BLOCKMOVE Adr&,Sadr&,Len& Sadr&=USR 7(Shndl&) CALL ADDRESOURCE(Shndl&,CVI(C$(42)),128,C$(15)) CALL UPDATERESFILE(Ref%) CALL CLOSERESFILE(Ref%) END FN '------------------------------------------------------------ LONG FN ReadStyle Stylhndl&=FN Res&(C$(42),128) LONG IF Stylhndl& Adr&=PEEK LONG(Stylhndl&) FONTSIZE=PEEK WORD(Adr&+2) FONTNUMBER=PEEK WORD(Adr&+4) left=PEEK WORD(Adr&+6) right=PEEK WORD(Adr&+8) XELSE left=VAL(C$(44)):right=VAL(C$(45)) FONTNUMBER=4:FONTSIZE=9 END IF CALL CLOSERESFILE(Ref%) END FN '************************************************************ ' • INITIALISIERUNG • '************************************************************ WINDOW OFF:COORDINATE WINDOW:DEF MOUSE=1:WIDTH=-2 RefNum%=FN OPENRESFILE("Edit.Res") FN Strings(128) FN Menustring(128) Marks&=FN GETPICTURE(134) GOSUB "SET MENU" GOSUB"BUILD WINDOW" GOSUB "FINDER" GOTO "EVENT QUEUE" '************************************************************ ' • CENTER DIALOG • '************************************************************ "CENTER DIALOG" Hndl&=FN Res&(C$(11),Num) Dadr&=PEEK LONG(Hndl&) T=PEEK WORD(Dadr&+0) L=PEEK WORD(Dadr&+2) B=PEEK WORD(Dadr&+4) R=PEEK WORD(Dadr&+6) GOSUB "CALC SCREEN" Hor=R-L:Ver=B-T LONG IF Num<>132 UT=(SB-Ver)/2:UL=(SR-Hor)/2:UB=UT+Ver:UR=UL+Hor XELSE UT=SB-Ver-50:UL=(SR-Hor)/2:UB=UT+Ver:UR=UL+Hor END IF L=UL-30:R=UR+30:T=UT-80:B=UB+40 CALL GLOBALTOLOCAL(T) POKE WORD PEEK LONG(Hndl&),UT POKE WORD PEEK LONG(Hndl&)+2,UL POKE WORD PEEK LONG(Hndl&)+4,UB POKE WORD PEEK LONG(Hndl&)+6,UR RETURN '************************************************************ ' • Calculate Screen Size • '************************************************************ "CALC SCREEN" CALL GETWMGRPORT(WMGRPORT&) ST=PEEK WORD(WMGRPORT&+8) SL=PEEK WORD(WMGRPORT&+10) SB=PEEK WORD(WMGRPORT&+12) SR=PEEK WORD(WMGRPORT&+14) RETURN '************************************************************ ' • THE QUEUE • '************************************************************ "EVENT QUEUE" ON DIALOG GOSUB "HANDLE DIALOG":DIALOG ON ON MENU GOSUB "HANDLE MENU" :MENU ON ON MOUSE GOSUB "HANDLE MOUSE" :MOUSE ON "LOOP" LONG IF Wptr& LONG IF VL>VR-30 DO IF VL>=12 THEN VL=VL-8:DL=DL-8 UNTIL VL<=VR-30 GOSUB "FORMAT WINDOW" END IF GOSUB "CHECK MENU" LONG IF Tehndl& CALL TEIDLE(Tehndl&) textLen=FN teWord%(60) IF textLen=0 THEN Durty=0 END IF MACT=MOUSE(0):MX=MOUSE(1):MY=MOUSE(2) CALL GETKEYS(K%(1)) LONG IF FN PTINRECT(MY,VT) CURSOR=1 XELSE CURSOR=0 END IF XELSE CURSOR=0 END IF GOTO"LOOP" DIALOG OFF:MOUSE OFF:MENU OFF '************************************************************ ' • DIALOG ROUTINES • '************************************************************ "HANDLE DIALOG" ACT=DIALOG(0):REF=DIALOG(ACT) LONG IF Wptr& IF ACT=1THEN GOSUB "SCROLL TEXT" IF ACT=3 THEN WINDOW(REF):RETURN IF ACT=4 THEN GOSUB "SCHLIESSEN" IF ACT=5 THEN "FORMAT WINDOW" LONG IF Tehndl& LONG IF ACT=16 SELECT REF CASE 1 CALL TEPINSCROLL(0,Lines*Hoch,Tehndl&) Bnew=BUTTON(1)-Lines IF Bnew<0 THEN Bnew=0 SCROLL BUTTON 1,Bnew Bold=Bnew CASE 4 CALL TEPINSCROLL(0,-Lines*Hoch,Tehndl&) Bnew=BUTTON(1)+Lines IF Bnew>Lines THEN Bnew=Lines SCROLL BUTTON 1,Bnew Bold=Bnew CASE 5 GOSUB "HELP" CASE 11 CALL TEPINSCROLL(0,Seite,Tehndl&) Bnew=BUTTON(1)-Zeilen IF Bnew<0 THEN Bnew=0 SCROLL BUTTON 1,Bnew Bold=Bnew CASE 12 CALL TEPINSCROLL(0,-Seite,Tehndl&) Bnew=BUTTON(1)+Zeilen IF Bnew>Lines THEN Bnew=Lines SCROLL BUTTON 1,Bnew Bold=Bnew CASE ELSE IF FN teWord%(60)+1>VAL(C$(25)) THEN GOSUB "ZU LANG":GOTO "EVENT QUEUE" FN Buffer LONG IF Insert IF REF<>8 THEN POKE WORD PEEK LONG(Tehndl&)+34,FN teWord%(32)+1 END IF CALL TEKEY(REF,Tehndl&) IF NOT (REF=30 OR REF=31) THEN Durty=1 GOSUB "SCROLL ADJUST" END SELECT END IF END IF END IF RETURN '************************************************************ ' • TEXT SCROLLING • '************************************************************ "SCROLL TEXT" LONG IF REF=1 Bnew=BUTTON(1) DY=Hoch*(Bold-Bnew) CALL TESCROLL(0,DY,Tehndl&) Bold=Bnew GOSUB "SCROLL ADJUST" XELSE Bxnew=BUTTON(2) DX=Bxold-Bxnew IF Bxnew<0 OR Bxnew>1440/Unit THEN DX=0 TEXT 3,9,0,0 FOR I=0 TO (WINDOW(2))/Unit IF I+Bxnew< 10 THEN PRINT %(1+Unit*I+Off,8) I+Bxnew;CHR$(32) IF I+Bxnew>=10 THEN PRINT %(1+Unit*I+Off,8) I+Bxnew NEXT I TEXT FONTNUMBER,FONTSIZE,0,1 GOSUB "SHORT UPDATE" Bxold=Bxnew END IF RETURN '************************************************************ ' • SCROLL ADJUST • '************************************************************ "SCROLL ADJUST" Lines=FN teWord%(94) Zeilen=(WINDOW(3)-30)/Hoch Seite=Zeilen*Hoch IF Bnew>Lines-Zeilen THEN Bnew=Lines-Zeilen LONG IF Lines>Zeilen SCROLL BUTTON 1,Bnew,0,Lines-Zeilen,Zeilen-1,,1 XELSE SCROLL BUTTON 1,0,0,0,Zeilen-1,,1 CALL TESCROLL(0,Hoch*Bold,Tehndl&) END IF "ARROW SCROLL" NLine=(FN teWord%(16)-VT)/Hoch DY=Hoch LONG IF NLine=Zeilen AND (REF=31 OR REF=13) Bnew=BUTTON(1)+1 IF Bnew>Lines THEN Bnew=Lines:DY=0 SCROLL BUTTON 1,Bnew CALL TEPINSCROLL(0,-DY,Tehndl&) Bold=Bnew END IF LONG IF NLine=0 AND REF=30 Bnew=BUTTON(1)-1 IF Bnew<0 THEN Bnew=0:DY=0 SCROLL BUTTON 1,Bnew CALL TEPINSCROLL(0,DY,Tehndl&) Bold=Bnew END IF Reihen=WINDOW(2)/6 LONG IF Lines=0 SCROLL BUTTON 2,0,0,0,0,,2 XELSE SCROLL BUTTON 2,Bxnew,0,1440/Unit,5,,2 END IF RETURN '************************************************************ ' • MOUSE ROUTINES • '************************************************************ "HANDLE MOUSE" MACT=MOUSE(0):MX=MOUSE(1):MY=MOUSE(2) CALL GETKEYS(K%(1)) LONG IF K%(4)=4 CURSOR=0 Menhndl&=BASHANDLE& GOSUB "POPUP" RETURN END IF LONG IF WINDOW(0)=1 LONG IF FN PTINRECT(MY,VT) LONG IF K%(4)<>1 CALL TECLICK(MY,0,Tehndl&) XELSE CALL TECLICK(MY,1,Tehndl&) END IF END IF L(1)=0:L(2)=4:L(3)=12:L(4)=WINDOW(2) LONG IF FN PTINRECT(MY,L(1)) IF Unit=28 THEN Unit=72 ELSE Unit=28 Lin&=FN Lineal(Unit,Bxnew) PICTURE,Lin& GOSUB "SCROLL ADJUST" RETURN END IF R(1)=13:R(2)=4:R(3)=22:R(4)=WINDOW(2)-1 L(1)=13:L(2)=left-Bxnew*Unit-4:L(3)=24:L(4)=left-Bxnew*Unit+4 LONG IF FN PTINRECT(MY,L(1)) left=FN Links CALL INVALRECT(AT):Mark=2 GOSUB "SCROLL ADJUST" END IF L(1)=13:L(2)=right-Bxnew*Unit-4:L(3)=24:L(4)=right-Bxnew*Unit+4 LONG IF FN PTINRECT(MY,L(1)) right=FN Rechts CALL INVALRECT(AT):Mark=2 GOSUB "SCROLL ADJUST" END IF END IF RETURN '************************************************************ ' • POPUP ROUTINES • '************************************************************ "POPUP" CALL INSERTMENU(Menhndl&,-1) T=MY-5:L=MX-34 CALL LOCALTOGLOBAL(T) Result=FN POPUPMENUSELECT(Menhndl&,T,L,Item) CALL GLOBALTOLOCAL(T) ITEMID=FN LOWORD(Result) IF ITEMID=0 THEN RETURN GOSUB "BASIC" GOSUB "SCROLL ADJUST" RETURN '************************************************************ ' • MENU ROUTINES • '************************************************************ "HANDLE MENU" MENUID=MENU(0):ITEMID=MENU(1) CALL HILITEMENU(0) LONG IF MENUID=128 LONG IF ITEMID<3 IF ITEMID=1 THEN GOSUB "INFO" IF ITEMID=2 THEN GOSUB "HELP" XELSE CALL GETITEM(DAHANDLE&,ITEMID,DA$) X&=FN OPENDESKACC(DA$) END IF RETURN END IF ON MENUID GOTO "DATEI","ARBEIT","EXTRAS","FONT","GRÖßE","BASIC" '------------------------------------------------------------ "DATEI" ON ITEMID GOTO "NEU","ÖFFNEN","SCHLIESSEN","NO OP","SICHERN","SICHERN ALS","NO OP","FORMAT","ANSICHT","DRUCKEN","NO OP","TRANSFER","ENDE" '------------------------------------------------------------ "NEU" GOSUB "SAVE ALERT" LONG IF Wptr& CALL TEDISPOSE(Tehndl&) Tehndl&=0 WINDOW CLOSE 1 Wptr&=0 X&=MEM(-1) END IF GOSUB "BUILD WINDOW" GOSUB "CHANGE MENU" GOSUB "PICT" RETURN '------------------------------------------------------------ "FINDER" A%=FINDERINFO(C%,F$,T&,Vol%) IF C% AND T&=CVI(C$(8)) THEN GOSUB "FINDEROPEN" RETURN '------------------------------------------------------------ "ÖFFNEN" LONG IF Wptr& GOSUB "SAVE ALERT" XELSE GOSUB "NEU" END IF CLEAR INDEX$ Num=100 Cicn=130 Type&=CVI(C$(8)) Put$=C$(1) Vol%=FN PutGet(Num,Cicn,Put$) IF F$=C$(15) THEN RETURN '------------------------------------------------------------ "FINDEROPEN" Ref%=FN openParams(F$,Vol%) OPEN "I",1,F$,1,Vol% LONG IF LOF(1)>VAL(C$(25)) Alert$=STR$(LOF(1)-VAL(C$(25))) CLOSE 1 GOSUB "FILE TOO LARGE" RETURN END IF FN ReadStyle CLEAR LOF(1)+100 len&=LOF(1) chndl&=FN NEWHANDLE(len&) cadr&=USR 3(chndl&) READ FILE 1,cadr&,len& CALL TESETTEXT(cadr&,len&,Tehndl&) cadr&=USR 7(chndl&) CLOSE 1 CALL GETFONTNAME(FONTNUMBER,Name$) FOR X=1 TO FN COUNTMITEMS(FONTHANDLE&) MENU 4,X,1 CALL GETITEM(FONTHANDLE&,X,FONTNAME$) IF FONTNAME$=Name$ THEN MENU 4,X,2 NEXT X FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&) MENU 5,X,1 CALL GETITEM(SIZEHANDLE&,X,SIZE$) IF FONTSIZE=VAL(SIZE$) THEN MENU 5,X,2 NEXT X CALL GETFNUM(Name$,FONTNUMBER) GOSUB "OUTLINE" GOSUB "NEW TEXT" WINDOW 1,F$ Bold=0 Bnew=0 Bxnew=0 Mark=0 GOSUB "SCROLL ADJUST" RETURN '------------------------------------------------------------ "SCHLIESSEN" LONG IF Wptr& Wnd=0 GOSUB "SAVE ALERT" CALL TEDISPOSE(Tehndl&) Tehndl&=0 WINDOW CLOSE 1 Wptr&=0 X&=MEM(-1) CURSOR=0 Durty=0 END IF GOSUB "CHANGE MENU" RETURN '------------------------------------------------------------ "SICHERN ALS" Num=101 Cicn=130 Type&=CVI(C$(8)) Put$=C$(2) Vol%=FN PutGet(Num,Cicn,Put$) IF F$=C$(15) THEN GOTO "EVENT QUEUE" GOSUB "SCHREIBEN" RETURN '------------------------------------------------------------ "SICHERN" CALL GETWTITLE(Wptr&,F$) LONG IF F$=C$(3) GOSUB "SICHERN ALS" END IF "SCHREIBEN" Hndl&=FN GET1RESOURCE(CVI(C$(42)),128) IF Hndl& THEN CALL RMVERESOURCE(Hndl&) FN WriteStyle DEF OPEN C$(10) OPEN "O",1,F$,1,Vol% LONG IF Wrap=1 CR=1 FN Format END IF texthndl&=FN TEGETTEXT(Tehndl&) textPtr&=USR 3(texthndl&) textLen&=FN GETHANDLESIZE(texthndl&) WRITE FILE #1,textPtr&,textLen& textPtr&=USR 7(texthndl&) CLOSE 1 WINDOW 1,F$ GOSUB "FORMAT WINDOW" save=1 Durty=0 RETURN '------------------------------------------------------------ "FORMAT" GOSUB "CALC SCREEN" Num=-8192 GOSUB "CENTER DIALOG" DEF PAGE T=DT:L=DL:B=DB:R=DR GOSUB "PICT" GOSUB "UPDATE" IF PRCANCEL THEN RETURN RETURN '------------------------------------------------------------ "ANSICHT" CALL GETWTITLE(Wptr&,F$) CURSOR=0 Num=139 GOSUB "CENTER DIALOG" Dloghndl&=FN GETNEWDIALOG(Num,0,-1) Winptr&=FN FRONTWINDOW CALL SETPORT(Winptr&) VPR =PEEK WORD(FN Print&+26) HPR =PEEK WORD(FN Print&+28) PRY1=PEEK WORD(FN Print&+ 8) PRX1=PEEK WORD(FN Print&+10) PRY2=PEEK WORD(FN Print&+12) PRX2=PEEK WORD(FN Print&+14) PDY1=PEEK WORD(FN Print&+16) PDX1=PEEK WORD(FN Print&+18) PDY2=PEEK WORD(FN Print&+20) PDX2=PEEK WORD(FN Print&+22) F=2:px!=HPR/120:py!=VPR/120 px!=px!*2.54:py!=py!*2.54:Unit$=C$(28) Scx!=60*HPR/(PDX2-PDX1) Scy!=60*VPR/(PDY2-PDY1) Sc=SQR(Scx!*Scy!) H$=C$(29):V$=C$(31) IF px!<10 THEN H$=C$(30) '---------------------------------------- "GREATER" H=Sc*(PDX2-PDX1)/(F*100):WX=375 V=Sc*(PDY2-PDY1)/(F*100):WY=294 LONG IF H>WX OR V>WY F=F+1:GOTO "GREATER" END IF PEN ,,,,3:WIDTH=-2 BOX FILL 1,1 TO WX-1,WY-1 CALL PENNORMAL BOX 0,0 TO WX,WY DX=(WX-H)/2:DY=(WY-V)/2 BOX DX,DY TO DX+H,DY+V PEN 2,2 PLOT DX+H,DY+2 TO DX+H,DY+V PLOT DX+2,DY+V TO DX+H,DY+V BT=DY+1:BL=DX+1:BB=BT+V-2:BR=BL+H-2 CALL ERASERECT(BT) H=Sc*(PRX2-PRX1)/(F*100):V=Sc*(PRY2-PRY1)/(F*100) DX=(WX-H)/2:DY=(WY-V)/2 PEN 1,1,,,3 BOX DX,DY TO DX+H,DY+V Lines=FN EditToPrint TEXT FONTNUMBER,FONTSIZE,0,1 U$=CHR$(45) u!=FN STRINGWIDTH(U$) n=(right-left)/u! U$=CHR$(32) v!=FN STRINGWIDTH(U$) E$=F$+C$(6)+STR$(P) e!=FN STRINGWIDTH(E$) m=(right-left-e!)/v! SIZE=Sc*FONTSIZE/(F*100) Hight!=Sc*Hoch/(F*100) LRand=Sc*(left-Off)/(F*100) PageLines=V/Hight!-1 IF footer=1 THEN PageLines=PageLines-4 LONG IF Lines MOD PageLines=0 Pages=Lines/PageLines XELSE Pages=Lines/PageLines+1 END IF BT=DY+1:BL=DX+1:BB=BT+V-2:BR=BL+H-2:P=1 '---------------------------------------- "NEXT PAGE" CALL ERASERECT(BT) TEXT 3,9,4,0 PRINT %(405,140) C$(35) TEXT 3,9,0,0 PRINT %(408,160) H$;USING C$(47);px!;Unit$ PRINT %(408,175) V$;USING C$(47);py!;Unit$ PRINT %(398,248) C$(36);STR$(Sc)+C$(32) PRINT %(398,268) C$(33);USING C$(52);P;C$(34);USING C$(52);Pages;CHR$(32) BOX DX,DY TO DX+H,DY+V CT=0:CL=0:CB=DY+V-1:CR=DX+H-1 CALL GLOBALTOLOCAL(CT) CALL CLIPRECT(CT) TEXT FONTNUMBER,SIZE,0,1 FOR I=0 TO PageLines-1 PRINT %(LRand+DX,(I+1)*Hight!+DY+1) INDEX$(I+(P-1)*PageLines) NEXT I LONG IF footer=1 D$=F$+STRING$(m,CHR$(32))+C$(6)+STR$(P) PRINT %(LRand+DX,(PageLines+2)*Hight!+DY+1) STRING$(n,CHR$(45)) PRINT %(LRand+DX,(PageLines+3)*Hight!+DY+1) D$ END IF CT=0:CL=0:CB=300:CR=495 CALL GLOBALTOLOCAL(CT) CALL CLIPRECT(CT) "CHOOSE PAGE" CALL MODALDIALOG(0,REF) IF REF=3 AND P<Pages THEN P=P+1:GOTO "NEXT PAGE" IF REF=2 AND P>1 THEN P=P-1:GOTO "NEXT PAGE" LONG IF REF=2 OR REF=3 IF REF=3 AND P=Pages THEN P=1 IF REF=2 AND P=1 THEN P=Pages GOTO "NEXT PAGE" END IF CALL DISPOSDIALOG(Dloghndl&) CALL SETPORT(Wptr&) VR=posright:DR=VR POKE WORD PEEK LONG(Tehndl&)+6,DR POKE WORD PEEK LONG(Tehndl&)+14,VR GOSUB "PICT" GOSUB "UPDATE" X&=MEM(-1) RETURN '------------------------------------------------------------ "DRUCKEN" GOSUB "CALC SCREEN" Num=-8191 GOSUB "CENTER DIALOG" DEF LPRINT T=DT:L=DL:B=DB:R=DR GOSUB "UPDATE" IF PRCANCEL THEN GOTO "DRUCK CLOSE" Lines=FN EditToPrint TRand=-FN PrParm%(16) LRand=-FN PrParm%(18) BRand=FN PrParm%(20) RRand=FN PrParm%(22) Pmin=FN PrParm%(62) Pmax=FN PrParm%(64) fnumber=FONTNUMBER:fsize=FONTSIZE TEXT fnumber,fsize,0,0 CALL GETFONTINFO(Ascent%) Hight=Ascent+Descent+Leading PageLines=(BRand-TRand)/Hight-1 IF footer=1 THEN PageLines=PageLines-4 IF Lines MOD PageLines>0 THEN Corr=1 ELSE Corr=0 Pages=Lines/PageLines+Corr IF Pages=0 THEN Pages=1 LONG IF Pmax=9999 POKE WORD PEEK LONG(PRHANDLE)+64,Pages Pmax=Pages END IF CURSOR=0 Num=132 GOSUB "CENTER DIALOG" Dloghndl&=FN GETNEWDIALOG(Num,0,-1) FOR P=1 TO Pages A$=STR$(Pmin):B$=STR$(Pmax) CALL PARAMTEXT(A$,B$,C$(15),C$(16)) CALL DRAWDIALOG(Dloghndl&) IF Pmin<Pmax THEN Pmin=Pmin+1 CALL GETKEYS(K%(1)) IF K(4)=-32768 THEN GOTO "DRUCK ENDE" FOR I=0 TO PageLines-1 LPRINT %(VL-12,(I+1)*Hight) INDEX$(I+(P-1)*PageLines) NEXT I LONG IF footer=1 D$=C$(6)+STR$(P) U$=CHR$(95) u=FN STRINGWIDTH(U$) n=(right-left)/u Rechts=right-left-FN STRINGWIDTH(D$) LPRINT %(VL-12,(PageLines+2)*Hight) STRING$(n,CHR$(95)) LPRINT %(VL-12,(PageLines+3)*Hight) F$; LPRINT %(VL-12+Rechts,(PageLines+3)*Hight) D$ END IF CLEAR LPRINT NEXT P "DRUCK ENDE" CLOSE LPRINT DELAY 500 CALL DISPOSDIALOG(Dloghndl&) T=DT:L=DL:B=DB:R=DR "DRUCK CLOSE" GOSUB "PICT" GOSUB "UPDATE" RETURN '------------------------------------------------------------ "NO OP" RETURN '------------------------------------------------------------ "TRANSFER" GOSUB "SAVE ALERT" GOSUB "SAVE MAKRO" Num=140 Hndl&=FN Res&(C$(11),Num) Cicn=129 Type&=CVI(C$(27)) Put$=C$(1) Vol%=FN PutGet(Num,Cicn,Put$) IF F$=C$(15) THEN RETURN RUN F$,Vol% '------------------------------------------------------------ "ENDE" GOSUB "SAVE ALERT" GOSUB "SAVE MAKRO" END RETURN '------------------------------------------------------------ "SAVE MAKRO" LONG IF Mak=1 CLEAR INDEX$ FOR I=1 TO NumM INDEX$(2*I-2)=N$(I) INDEX$(2*I-1)=M$(I) NEXT I Len&=MEM(20) Adr&=MEM(40) Shndl&=FN NEWHANDLE(Len&+2) Sadr&=USR 3(Shndl&) BLOCKMOVE Adr&,Sadr&+2,Len& POKE WORD Sadr&,NumM Ref%=PEEK WORD(&900) CALL USERESFILE(Ref%) CALL RMVERESOURCE(MakHndl&) CALL ADDRESOURCE(Shndl&,CVI(C$(13)),128,C$(14)) Sadr&=USR 7(Shndl&) END IF RETURN '------------------------------------------------------------ "ARBEIT" ON ITEMID GOTO "ZURÜCK","NO OP","SCHNEIDEN","KOPIEREN","EINSETZEN","LÖSCHEN","NO OP","AUSWAHL" '------------------------------------------------------------ "ZURÜCK" X&=MEM(-1) LONG IF Undo=0 FN Undo Bufadr&=USR 3(Bufhndl&) CALL TESETTEXT(Bufadr&,Buflen&,Tehndl&) Bufadr&=USR 7(Bufhndl&) XELSE FN Buffer Undoadr&=USR 3(Undohndl&) CALL TESETTEXT(Undoadr&,Undolen&,Tehndl&) Undoadr&=USR 7(Undohndl&) END IF CLS CALL TECALTEXT(Tehndl&) CALL TEUPDATE(VT,Tehndl&) GOSUB "SCROLL ADJUST" GOSUB "CHECK MENU" Undo=Undo+1:IF Undo=2 THEN Undo=0 RETURN '------------------------------------------------------------ "SCHNEIDEN" FN Buffer CALL TECUT(Tehndl&) Tsize&=PEEK WORD(&AB0) CLEAR Tsize& Tadr&=PEEK LONG(PEEK LONG(&AB4)) LONG IF Tsize&>0 Err&=FN ZEROSCRAP Err&=FN PUTSCRAP(Tsize&,CVI(C$(8)),Tadr&) END IF GOSUB "SCROLL ADJUST" GOSUB "CHECK MENU" RETURN '------------------------------------------------------------ "KOPIEREN" CALL TECOPY(Tehndl&) Tsize&=PEEK WORD(&AB0) CLEAR Tsize& Tadr&=PEEK LONG(PEEK LONG(&AB4)) Tlen&=PEEK WORD(&AB0) LONG IF Tlen&>0 ERR&=FN ZEROSCRAP ERR&=FN PUTSCRAP(Tlen&,CVI(C$(8)),Tadr&) END IF RETURN '------------------------------------------------------------ "EINSETZEN" FN Buffer DEFSTR LONG CP&=USR 5(0) Len&=FN GETSCRAP(CP&,CVI(C$(8)),D&) LONG IF Len&+FN teWord(60)>VAL(C$(25)) GOSUB "SCRAP TOO LARGE" GOTO "EVENT QUEUE" END IF LONG IF Len&>0 Adr&=USR 3(CP&) CALL TEDELETE(Tehndl&) CALL TEINSERT(Adr&,Len&,Tehndl&) END IF X= USR 6(CP&) DEFSTR WORD Lines=FN teWord%(94) GOSUB "SCROLL ADJUST" Durty=1 GOSUB "CHECK MENU" RETURN '------------------------------------------------------------ "LÖSCHEN" FN Buffer CALL TEDELETE(Tehndl&) GOSUB "SCROLL ADJUST" GOSUB "CHECK MENU" RETURN '------------------------------------------------------------ "AUSWAHL" textLen=FN teWord(60) CALL TESETSELECT(0,textLen,Tehndl&) RETURN '------------------------------------------------------------ "EXTRAS" ON ITEMID GOTO "MAKROS","NO OP","FINDEN","NO OP","EINFÜGEN","UMBRUCH","NO OP","CR DAZU","CR WEG","NO OP","FOOTER","STATISTIK" '------------------------------------------------------------ "MAKROS" CALL DELMENUITEM(BASHANDLE&,1) CALL DELMENUITEM(BASHANDLE&,1) IF Wptr&=0 THEN CALL ENABLEITEM(BASHANDLE&,0) Num=133 GOSUB "CENTER DIALOG" POKE WORD &AFA,VAL(C$(17)) Dloghndl&=FN GETNEWDIALOG(Num,0,-1) Dptr&=FN FRONTWINDOW CALL SETPORT(Dptr&) tehndl&=PEEK LONG(Dloghndl&+160) item=0 NumtM=NumM FOR I=1 TO NumtM Nt$(I)=N$(I) Mt$(I)=M$(I) NEXT I DO item=item+1 CALL GETDITEM(Dloghndl&,item,itype(item),ihndl&(item),irect$(item)) UNTIL ihndl&(item)=0 OR item=63 CALL SETITEXT(ihndl&(5),Nt$(1)) CALL SETITEXT(ihndl&(6),Mt$(1)) CALL SETCTLVALUE(ihndl&(7),1) CALL SELITEXT(Dloghndl&,5,0,255) CURSOR=0 '------------------------- "MAKROLOOP" CALL MODALDIALOG(0,REF) IF REF=9 OR REF=2 THEN "MAKROEND" IF REF=3 THEN "MAKRONEW" IF REF=4 THEN "MAKROCLEAR" IF REF=7 THEN "MAKRO" IF REF=6 THEN "MAKROEDIT" IF REF=1 THEN CALL TEKEY(13,tehndl&) GOTO "MAKROLOOP" '------------------------- "MAKRONEW" NumtM=FN COUNTMITEMS(BASHANDLE&) LONG IF NumtM<50 CALL GETITEXT(ihndl&(5),Menu$) FOR I=1 TO NumtM CALL GETITEM(BASHANDLE&,I,Old$) LONG IF Menu$=Old$ CALL GETITEXT(ihndl&(6),Makro$) Mt$(I)=Makro$ GOTO "MAKROLOOP" END IF NEXT I CALL HIDECONTROL(ihndl&(7)) CALL GETITEXT(ihndl&(6),Makro$) CALL INSMENUITEM(BASHANDLE&,Menu$,NumtM) COLOR 0 BOX FILL 268,15 TO 425,40 COLOR -1 NumtM=NumtM+1 Nt$(NumtM)=Menu$ Mt$(NumtM)=Makro$ CALL SHOWCONTROL(ihndl&(7)) CALL SETCTLVALUE(ihndl&(7),NumtM) CALL SELITEXT(Dloghndl&,5,0,255) XELSE BEEP END IF GOTO "MAKROLOOP" '------------------------- "MAKROCLEAR" NumtM=FN COUNTMITEMS(BASHANDLE&) LONG IF NumtM>1 N=FN GETCTLVALUE(ihndl&(7)) CALL HIDECONTROL(ihndl&(7)) CALL DELMENUITEM(BASHANDLE&,N) COLOR 0 BOX FILL 268,15 TO 425,40 COLOR -1 NumtM=NumtM-1 FOR I=N TO NumtM Mt$(I)=Mt$(I+1) Nt$(I)=Nt$(I+1) NEXT I CALL SETITEXT(ihndl&(5),Nt$(1)) CALL SETITEXT(ihndl&(6),Mt$(1)) CALL SETCTLVALUE(ihndl&(7),1) CALL SHOWCONTROL(ihndl&(7)) CALL SELITEXT(Dloghndl&,5,0,255) XELSE BEEP END IF GOTO "MAKROLOOP" '------------------------- "MAKROEDIT" CALL GETITEXT(ihndl&(6),Menu$) IF LEN(Menu$)>=255 THEN BEEP:CALL TEKEY(8,tehndl&) GOTO "MAKROLOOP" '------------------------- "MAKRO" N=FN GETCTLVALUE(ihndl&(7)) CALL SETITEXT(ihndl&(5),Nt$(N)) CALL SETITEXT(ihndl&(6),Mt$(N)) CALL SELITEXT(Dloghndl&,5,0,255) GOTO "MAKROLOOP" '------------------------- "MAKROEND" LONG IF REF=9 Mak=1 NumM=NumtM FOR I=1 TO NumM N$(I)=Nt$(I) M$(I)=Mt$(I) NEXT I XELSE Mak=0 END IF FOR I=1 TO NumM CALL DELMENUITEM(BASHANDLE&,1) NEXT I T$=C$(16)+C$(51) MENU 6,1,1,T$ MENU 6,2,0,C$(18) FOR I=1 TO NumM CALL INSMENUITEM(BASHANDLE&,N$(I),I+1) NEXT I IF Wptr&=0 THEN CALL DISABLEITEM(BASHANDLE&,0) POKE WORD &AFA,0 CALL DISPOSDIALOG(Dloghndl&) IF Wptr& THEN CALL SETPORT(Wptr&) IF Wptr& THEN GOSUB "UPDATE" GOTO "EVENT QUEUE" RETURN '------------------------------------------------------------ "FINDEN" Find$=C$(15):new&=0:fcount=0:rcount=0::old&=0 CALL TESETSELECT(0,0,Tehndl&) CALL TESELVIEW(Tehndl&) CALL TEAUTOVIEW(-1,Tehndl&) But1=0:But2=0:But3=0 Num=134 GOSUB "CENTER DIALOG" POKE WORD &AFA,VAL(C$(17)) Dloghndl&=FN GETNEWDIALOG(Num,0,-1) Dptr&=FN FRONTWINDOW CALL SETPORT(Dptr&) tehndl&=PEEK LONG(Dloghndl&+160) item=0 DO item=item+1 CALL GETDITEM(Dloghndl&,item,itype(item),ihndl&(item),irect$(item)) UNTIL ihndl&(item)=0 OR item=63 CALL SELITEXT(Dloghndl&,5,0,255) CURSOR=0 '------------------------------------- "FINDLOOP" CALL MODALDIALOG(0,REF) "MATCH" LONG IF REF=2 OR REF=3 CALL GETITEXT(ihndl&(5),Find$) T$=Find$ GOSUB "CRTEST" Find$=T$ CALL GETITEXT(ihndl&(6),Neu$) T$=Neu$ GOSUB "CRTEST" Neu$=T$ Alt$=Find$ LONG IF But2=0 Alt$=UCASE$(Alt$) END IF IF Copy$<>Alt$ THEN fcount=0:rcount=0:old&=0 Copy$=Alt$ GOTO "FIND NEW" END IF IF REF=4 THEN "FINDEND" IF REF=7 THEN "ALLNEW":fcount=0:rcount=0:old&=0 IF REF=8 THEN "CASE":fcount=0:rcount=0:old&=0 IF REF=9 THEN "WORD":fcount=0:rcount=0:old&=0 IF REF=1 THEN CALL TEKEY(13,tehndl&) GOTO "FINDLOOP" '------------------------------------- "CRTEST" L=LEN(T$) FOR I=1 TO L N=INSTR(I,UCASE$(T$),C$(48)) LONG IF N T$=LEFT$(T$,N-1)+CHR$(13)+RIGHT$(T$,L-N-1) GOTO "CRTEST" END IF NEXT I "TABTEST" L=LEN(T$) FOR I=1 TO L N=INSTR(I,UCASE$(T$),C$(49)) LONG IF N T$=LEFT$(T$,N-1)+CHR$(9)+RIGHT$(T$,L-N-1) GOTO "TABTEST" END IF NEXT I "LFTEST" L=LEN(T$) FOR I=1 TO L N=INSTR(I,UCASE$(T$),C$(50)) LONG IF N T$=LEFT$(T$,N-1)+CHR$(10)+RIGHT$(T$,L-N-1) GOTO "LFTEST" END IF NEXT I RETURN '------------------------------------- "FIND NEW" LONG IF Find$=C$(15) Alert1$=C$(21) Alert2$=C$(15) GOSUB "ALERT" GOTO "FINDLOOP" END IF LONG IF Find$=Neu$ AND REF=3 Alert1$=C$(23) Alert2$=C$(15) GOSUB "ALERT" GOTO "FINDLOOP" END IF flen&=LEN(Alt$) fadr&=VARPTR(Alt$)+1 rlen&=LEN(Neu$) radr&=VARPTR(Neu$)+1 chndl&=FN TEGETTEXT(Tehndl&) clen&=FN GETHANDLESIZE(chndl&) IF REF=3 THEN GOTO "REPLACE" '------------------------------------- "FIND" IF But1=1 THEN CALL TEAUTOVIEW(0,Tehndl&) new&=FN MUNGER(chndl&,old&,fadr&,flen&,0,rlen&) LONG IF new&>=0 FN Word LONG IF But1=0 CALL MODALDIALOG(0,REF) IF REF<>2 THEN GOTO "MATCH" END IF fcount=fcount+1 old&=new&+flen& GOTO "FIND" XELSE LONG IF fcount Alert1$=STR$(fcount) Alert2$=C$(19) XELSE Alert1$=CHR$(34)+Find$+CHR$(34) Alert2$=C$(22) END IF GOSUB "ALERT" old&=0 fcount=0 rcount=0 CALL TESETSELECT(0,0,Tehndl&) CALL TEAUTOVIEW(-1,Tehndl&) END IF GOTO "FINDLOOP" '------------------------------------- "REPLACE" IF FN teWord%(60)+rlen&>VAL(C$(25)) THEN GOSUB "ZU LANG":GOTO "FINDLOOP" IF But1=1 THEN CALL TEAUTOVIEW(0,Tehndl&) new&=FN MUNGER(chndl&,old&,fadr&,flen&,0,rlen&) LONG IF new&>=0 FN Word LONG IF But1=0 CALL MODALDIALOG(0,REF) IF REF<>3 THEN GOTO "MATCH" END IF CALL TEDELETE(Tehndl&) CALL TEINSERT(radr&,rlen&,Tehndl&) CALL TESETSELECT(new&+flen&,new&+rlen&,Tehndl&) chndl&=FN TEGETTEXT(Tehndl&) clen&=FN GETHANDLESIZE(chndl&) old&=new&+rlen& rcount=rcount+1 GOTO "REPLACE" XELSE LONG IF rcount Alert1$=STR$(rcount) Alert2$=C$(20) XELSE Alert1$=CHR$(34)+Find$+CHR$(34) Alert2$=C$(22) END IF GOSUB "ALERT" old&=0 fcount=0 rcount=0 CALL TESETSELECT(0,0,Tehndl&) CALL TEAUTOVIEW(-1,Tehndl&) END IF GOTO "FINDLOOP" '------------------------------------- "ALLNEW" But1=FN GETCTLVALUE(ihndl&(7)) IF But1=1 THEN But1=0 ELSE But1=1 CALL SETCTLVALUE(ihndl&(7),But1) GOTO "FINDLOOP" "CASE" But2=FN GETCTLVALUE(ihndl&(8)) IF But2=1 THEN But2=0 ELSE But2=1 CALL SETCTLVALUE(ihndl&(8),But2) GOTO "FINDLOOP" "WORD" But3=FN GETCTLVALUE(ihndl&(9)) IF But3=1 THEN But3=0 ELSE But3=1 CALL SETCTLVALUE(ihndl&(9),But3) GOTO "FINDLOOP" '------------------------------------- "FINDEND" POKE WORD &AFA,0 CALL DISPOSDIALOG(Dloghndl&) CALL SETPORT(Wptr&) GOSUB "UPDATE" GOSUB "SCROLL ADJUST" SCROLL BUTTON 1,0 CALL TESETSELECT(0,0,Tehndl&) CALL TEAUTOVIEW(0,Tehndl&) Durty=1 GOTO "EVENT QUEUE" RETURN '------------------------------------------------------------ "EINFÜGEN" IF Insert=0 THEN Insert=1:MENU 3,8,1 ELSE Insert=0:MENU 3,8,2 RETURN '------------------------------------------------------------ "UMBRUCH" LONG IF Wrap=1 POKE WORD PEEK LONG(Tehndl&)+72,-1 Wrap=0 MENU 3,6,1 XELSE POKE WORD PEEK LONG(Tehndl&)+72,0 Wrap=1 MENU 3,6,2 END IF Mark=2 GOSUB "FORMAT WINDOW" CALL TEPINSCROLL(0,0,Tehndl&) Bxold=0 SCROLL BUTTON 2,0,0,1440/Unit,5,,2 RETURN '------------------------------------------------------------ "CR DAZU" CR=1 FN Format GOSUB "FORMAT WINDOW" RETURN '------------------------------------------------------------ "CR WEG" CR=0 FN Format GOSUB "FORMAT WINDOW" RETURN '------------------------------------------------------------ "FOOTER" LONG IF footer=1 footer=0 MENU 3,11,1 XELSE footer=1 MENU 3,11,2 END IF RETURN '------------------------------------------------------------ "STATISTIK" Num=137 GOSUB "CENTER DIALOG" Dloghndl&=FN GETNEWDIALOG(Num,0,-1) Dptr&=FN FRONTWINDOW CALL SETPORT(Dptr&) item=0 DO item=item+1 CALL GETDITEM(Dloghndl&,item,itype(item),ihndl&(item),irect$(item)) UNTIL ihndl&(item)=0 OR item=63 CURSOR=0 '------------------------------------- "STATLOOP" Num1$=STR$(FN teWord%(94))+C$(26) Num2$=STR$(FN teWord%(60))+C$(26) Num3$=STR$(MEM(-2)/1000)+C$(24) Num4$=STR$(MEM(-1)/1000)+C$(24) CALL PARAMTEXT(Num1$,Num2$,Num3$,Num4$) CALL DRAWDIALOG(Dloghndl&) CALL MODALDIALOG(0,REF) IF REF=1 THEN "STATEND" GOTO "STATLOOP" "STATEND" CALL DISPOSDIALOG(Dloghndl&) CALL SETPORT(Wptr&) GOSUB "UPDATE" GOTO "EVENT QUEUE" RETURN '************************************************************ "FONT" FOR X=1 TO FN COUNTMITEMS(FONTHANDLE&) MENU 4,X,1 NEXT X CALL GETITEM(FONTHANDLE&,ITEMID,FONTNAME$) CALL GETFNUM(FONTNAME$,FONTNUMBER) MENU 4,ITEMID,2 "OUTLINE" FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&) CALL GETITEM(SIZEHANDLE&,X,SIZE$):SIZE=VAL(SIZE$) CALL SETITEMSTYLE(SIZEHANDLE&,X,0) LONG IF FN REALFONT(FONTNUMBER,SIZE) CALL SETITEMSTYLE(SIZEHANDLE&,X,8) END IF NEXT GOSUB "NEW TEXT" RETURN '------------------------------------------------------------ "GRÖßE" CALL GETITEM(SIZEHANDLE&,ITEMID,SIZE$) LONG IF ITEMID<10 FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&) MENU 5,X,1 NEXT X MENU 5,ITEMID,2 FONTSIZE= VAL(SIZE$) END IF GOSUB "NEW TEXT" RETURN '------------------------------------------------------------ "BASIC" FN Buffer LONG IF ITEMID>2 Adr&=VARPTR(M$(ITEMID-2))+1 Len&=LEN(M$(ITEMID-2)) XELSE Hndl&=FN Res&(C$(8),128) Adr&=PEEK LONG(Hndl&) Len&=FN SIZERESOURCE(Hndl&) END IF IF FN teWord%(60)+Len&>VAL(C$(25)) THEN GOSUB "ZU LANG":GOTO "EVENT QUEUE" CALL TEINSERT(Adr&,Len&,Tehndl&) GOSUB "SCROLL ADJUST" Durty=1 GOSUB "CHECK MENU" RETURN SEGMENT '************************************************************ ' • BUILD THE MENU • '************************************************************ "SET MENU" Mlist&=FN GETNEWMBAR(128) CALL SETMENUBAR(Mlist&) CALL DRAWMENUBAR DAHANDLE&=FN GETMENU(128) EDITHANDLE&=FN GETMENU(2) FONTHANDLE&=FN GETMENU(4) SIZEHANDLE&=FN GETMENU(5) BASHANDLE&=FN GETMENU(6) LONG IF FN COUNTMITEMS(DAHANDLE&)=3 CALL ADDRESMENU(DAHANDLE&,CVI(C$(12))) END IF FONTNAME$=C$(4) CALL ADDRESMENU (FONTHANDLE&,CVI(C$(9))) FOR X=1 TO FN COUNTMITEMS(FONTHANDLE&) CALL GETITEM(FONTHANDLE&,X,FONTNAME$) IF FONTNAME$=C$(4) THEN MENU 4,X,2 NEXT X FONTSIZE=VAL(C$(5)) FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&) CALL GETITEM(SIZEHANDLE&,X,SIZE$) IF FONTSIZE=VAL(SIZE$) THEN MENU 5,X,2 NEXT X CALL GETFNUM(C$(4),FONTNUMBER) GOSUB "OUTLINE" FOR I=1 TO NumM CALL INSMENUITEM(BASHANDLE&,N$(I),I+1) NEXT I RETURN '************************************************************ ' • CHECK MENU-ATTRIBUTES • '************************************************************ "CHECK MENU" LONG IF Tehndl& Choose=FN teWord(34)-FN teWord(32) LONG IF Choose=0 MENU 2,3,0 MENU 2,4,0 MENU 2,6,0 XELSE MENU 2,3,1 MENU 2,4,1 MENU 2,6,1 END IF END IF CP&=USR 5(0) Scrap&=FN GETSCRAP(CP&,CVI(C$(8)),D&) IF Scrap&>0 THEN MENU 2,5,1 ELSE MENU 2,5,0 X= USR 6(CP&) LONG IF Durty=0 AND textLen=0 MENU 1,5,0 MENU 1,10,0 MENU 2,8,0 MENU 3,3,0 MENU 3,8,0 MENU 3,9,0 XELSE MENU 1,5,1 MENU 1,10,1 MENU 2,8,1 MENU 3,3,1 MENU 3,8,1 MENU 3,9,1 END IF RETURN '************************************************************ ' • CHANGE MENU-ATTRIBUTES • '************************************************************ "CHANGE MENU" LONG IF Wptr& MENU 1,3,1 MENU 1,5,1 MENU 1,6,1 MENU 1,7,1 MENU 1,8,1 MENU 1,9,1 MENU 1,10,1 MENU 3,3,1 MENU 3,5,1 MENU 3,6,1 MENU 3,8,1 MENU 3,9,1 MENU 3,11,1 MENU 3,12,1 CALL ENABLEITEM(EDITHANDLE&,0) CALL ENABLEITEM(FONTHANDLE&,0) CALL ENABLEITEM(SIZEHANDLE&,0) CALL ENABLEITEM(BASHANDLE&,0) XELSE MENU 1,3,0 MENU 1,5,0 MENU 1,6,0 MENU 1,7,0 MENU 1,8,0 MENU 1,9,0 MENU 1,10,0 MENU 3,3,0 MENU 3,5,0 MENU 3,6,0 MENU 3,8,0 MENU 3,9,0 MENU 3,11,0 MENU 3,12,0 CALL DISABLEITEM(EDITHANDLE&,0) CALL DISABLEITEM(FONTHANDLE&,0) CALL DISABLEITEM(SIZEHANDLE&,0) CALL DISABLEITEM(BASHANDLE&,0) END IF CALL DRAWMENUBAR RETURN '************************************************************ ' • CHANGE TEXT-ATTRIBUTES • '************************************************************ "NEW TEXT" TEXT FONTNUMBER,FONTSIZE,FONTSTYLE,FONTMODE POKE WORD PEEK LONG(Tehndl&)+74,FONTNUMBER POKE WORD PEEK LONG(Tehndl&)+78,1 POKE WORD PEEK LONG(Tehndl&)+80,FONTSIZE CALL GETFONTINFO(Ascent%) Hoch=Ascent+Descent+Leading POKE WORD PEEK LONG(Tehndl&)+24,Hoch POKE WORD PEEK LONG(Tehndl&)+26,Ascent IF VL>=12 THEN POKE WORD PEEK LONG(Tehndl&)+10,left POKE WORD PEEK LONG(Tehndl&)+14,right POKE WORD PEEK LONG(Tehndl&)+2,left POKE WORD PEEK LONG(Tehndl&)+6,right CALL INVALRECT(VT) IF Start=0 THEN Mark=2 RETURN '************************************************************ ' • PUT GRAPHICS & TEXT IN WINDOW • '************************************************************ "FORMAT WINDOW" CALL PENNORMAL LONG IF Wptr& LONG IF Mark=0 GOSUB "PICT" END IF "SHORT UPDATE" FN Markposition Zeilen=(WINDOW(3)-30)/Hoch Seite=Zeilen*Hoch Rand=WINDOW(3)-25-Seite VT=25:VL=posleft:VB=WINDOW(3)-Rand:VR=posright DT=VT:DL=VL:DB=VB:DR=VR POKE WORD PEEK LONG(Tehndl&),DT POKE WORD PEEK LONG(Tehndl&)+2,DL POKE WORD PEEK LONG(Tehndl&)+4,DB POKE WORD PEEK LONG(Tehndl&)+6,DR POKE WORD PEEK LONG(Tehndl&)+8,VT IF VL>=12 THEN POKE WORD PEEK LONG(Tehndl&)+10,VL POKE WORD PEEK LONG(Tehndl&)+12,VB POKE WORD PEEK LONG(Tehndl&)+14,VR AT=25:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1 CALL CLIPRECT(AT) CALL ERASERECT(AT) CALL TESCROLL(0,-Hoch*BUTTON(1),Tehndl&) CALL TECALTEXT(Tehndl&) CALL TEUPDATE(VT,Tehndl&) GOSUB "SCROLL ADJUST" Mark=0 END IF IF Start=1 THEN Start=0 RETURN '************************************************************ ' • WINDOW ROUTINES • '************************************************************ "BUILD WINDOW" GOSUB "CALC SCREEN" T=ST+40:L=SL+3:B=SB-3:R=SR-3 WINDOW 1,C$(3),(L,T)-(R,B),9 Wptr&=FN FRONTWINDOW CALL SETPORT(Wptr&) Bold=0 Bnew=0 Bxnew=0 Mark=0 Unit=VAL(C$(46)) Off=VAL(C$(44)) right=VAL(C$(45)) FONTSTYLE=0 FONTMODE=0 CALL GETFONTINFO(Ascent%) Hoch=Ascent+Descent+Leading GOSUB"BUILD EDITS" GOSUB "NEW TEXT" RETURN '************************************************************ ' • CREATE EDIT FIELDS AND BUTTONS • '************************************************************ "BUILD EDITS" LONG IF Wptr& PICTURE ON PLOT 0,12 TO WINDOW(2)-1,12 PICTURE OFF,Upict& Zeilen=(WINDOW(3)-30)/Hoch Seite=Zeilen*Hoch Rand=WINDOW(3)-25-Seite left=Off:right=VAL(C$(45)) VT=25:VL=left:VB=WINDOW(3)-Rand:VR=right DT=VT:DL=VL:DB=VB:DR=VR Tehndl&=FN TENEW(DT,VT) POKE WORD PEEK LONG(Tehndl&)+72,-1 CALL TEACTIVATE(Tehndl&) GOSUB "SCROLL ADJUST" END IF RETURN '************************************************************ "INFO" DEF MOUSE=0 Num=128:GOSUB "CENTER DIALOG" CURSOR=0 Dloghndl&=FN GETNEWDIALOG(128,0,-1) Dptr&=FN FRONTWINDOW CALL SETPORT(Dptr&) CALL DRAWDIALOG(Dloghndl&) CALL HILITEWINDOW(Wptr&,-1) DO FT=7:FL=8:FB=37:FR=38 DELAY VAL(C$(38)) CALL INVERTRECT(FT) UNTIL MOUSE(3) CALL DISPOSDIALOG(Dloghndl&) IF Wptr& THEN CALL SETPORT(Wptr&) IF Wptr& THEN GOSUB "UPDATE" DEF MOUSE=1 RETURN '------------------------------------------------------------ "HELP" Num=138:GOSUB "CENTER DIALOG" POKE WORD(&AFA),40 Dloghndl&=FN GETNEWDIALOG(138,0,-1) Dptr&=FN FRONTWINDOW CALL SETPORT(Dptr&) tehndl&=PEEK LONG(Dloghndl&+160) tnum=129 CALL DRAWDIALOG(Dloghndl&) h=0 GOTO "HELPTEXT" "HELPLOOP" CALL GETKEYS(K%(1)) IF K%(8)=16 THEN REF=2:GOTO "HCHECK" IF K%(8)=8 THEN REF=3:GOTO "HCHECK" CALL MODALDIALOG(0,REF) "HCHECK" CALL HILITEMENU(0) IF REF=1 THEN "HELPEND" IF REF=2 OR REF=3 THEN "HELPTEXT" GOTO "HELPLOOP" "HELPTEXT" CALL TESETSELECT(0,0,tehndl&) IF REF=2 THEN tnum=tnum+1:IF tnum=135 THEN tnum=129 IF REF=3 THEN tnum=tnum-1:IF tnum=128 THEN tnum=134 LONG IF tnum=134 CALL HILITEMENU(6) XELSE IF tnum>129 THEN CALL HILITEMENU(tnum-129) ELSE CALL HILITEMENU(128) END IF Hndl&=FN Res&(C$(8),tnum) Len&=FN SIZERESOURCE(Hndl&) CALL GETRESINFO(Hndl&,id,type&,Name$) CALL SETWTITLE(Dptr&,Name$) Adr&=USR 3(Hndl&) CALL TESETTEXT(Adr&,Len&,tehndl&) CALL TESETSELECT(0,0,tehndl&) Adr&=USR 7(Hndl&) IF h THEN CALL DRAWDIALOG(Dloghndl&) h=h+1 GOTO "HELPLOOP" "HELPEND" POKE WORD(&AFA),0 CALL DISPOSDIALOG(Dloghndl&) IF Wptr& THEN CALL SETPORT(Wptr&) IF Wptr& THEN GOSUB "UPDATE" GOTO "EVENT QUEUE" '------------------------------------------------------------ "FILE TOO LARGE" POKE WORD &AFA,0 BEEP Num=129:GOSUB "CENTER DIALOG" Dloghndl&=FN GETNEWDIALOG(129,0,-1) CALL PARAMTEXT(F$,Alert$,C$(15),C$(15)) CURSOR=0 CALL MODALDIALOG(0,REF) CALL DISPOSDIALOG(Dloghndl&) WINDOW 1,F$ GOSUB "UPDATE" RETURN '------------------------------------------------------------ "SCRAP TOO LARGE" POKE WORD &AFA,0 BEEP Num=130:GOSUB "CENTER DIALOG" Dloghndl&=FN GETNEWDIALOG(130,0,-1) CALL PARAMTEXT(F$,C$(15),C$(15),C$(15)) CURSOR=0 CALL MODALDIALOG(0,REF) CALL DISPOSDIALOG(Dloghndl&) GOSUB "UPDATE" RETURN '------------------------------------------------------------ "SAVE ALERT" POKE WORD &AFA,0 LONG IF Durty=1 BEEP Num=131:GOSUB "CENTER DIALOG" Dloghndl&=FN GETNEWDIALOG(131,0,-1) CALL GETWTITLE(Wptr&,F$) CALL PARAMTEXT(F$,C$(15),C$(15),C$(15)) CURSOR=0 CALL MODALDIALOG(0,REF) CALL DISPOSDIALOG(Dloghndl&) GOSUB "UPDATE" IF REF=3 THEN "EVENT QUEUE" LONG IF REF=1 LONG IF F$=C$(3) GOSUB "SICHERN" END IF END IF END IF RETURN '------------------------------------------------------------ "ALERT" Num=135:GOSUB "CENTER DIALOG" POKE WORD &AFA,0 hndl&=FN GETNEWDIALOG(135,0,-1) Dptr&=FN FRONTWINDOW CALL SETPORT(Dptr&) BEEP CALL PARAMTEXT(Alert1$,Alert2$,C$(15),C$(15)) CALL TESETSELECT(0,0,Tehndl&) CALL DRAWDIALOG(hndl&) DELAY 1000 CALL SETPORT(Wptr&) POKE WORD &AFA,VAL(C$(17)) CALL DISPOSDIALOG(hndl&) RETURN '------------------------------------------------------------ "ZU LANG" Num=136:GOSUB "CENTER DIALOG" POKE WORD &AFA,0 hndl&=FN GETNEWDIALOG(136,0,-1) Dptr&=FN FRONTWINDOW CALL SETPORT(Dptr&) BEEP CALL DRAWDIALOG(hndl&) DELAY 1000 CALL SETPORT(Wptr&) POKE WORD &AFA,VAL(C$(17)) CALL DISPOSDIALOG(hndl&) RETURN '------------------------------------------------------------ "PICT" PICTURE(0,0),Upict& Lin&=FN Lineal(Unit,Bxnew) PICTURE,Lin& FN Markposition RETURN '------------------------------------------------------------ "UPDATE" LONG IF Wptr& CALL BEGINUPDATE(Wptr&) CALL TEUPDATE(T,Tehndl&) CALL ENDUPDATE(Wptr&) END IF RETURN '************************************************************